package everyday.nowcoder;

/**
 * @Author: wenjingyuan
 * @Date: 2023/03/19/9:41
 * @Description:判断链表是否有环
 */
public class NC4 {
    public boolean hasCycle(ListNode head) {
        //首先我们先判断链表为空或者链表只有一个节点的情况
        if (head == null || head.next == null) {
            return false;
        }
        //接下来我们让快慢指针都指向头结点
        ListNode slow = head;
        ListNode fast = head;
        //当快指针指向空时返回错误，因为快指针每次走两步那么
        //我们需要判断两步是否为空
        while (fast != null && fast.next != null) {
            //快指针走两步，慢指针走一步
            slow = slow.next;
            fast = fast.next.next;
            if (slow == fast) {
                return true;
            }
        }

        return false;
    }
}
